package com.itheima.service.Impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.dao.MenuDao;
import com.itheima.dao.RoleDao;
import com.itheima.entity.PageResult;
import com.itheima.pojo.Menu;
import com.itheima.pojo.Role;
import com.itheima.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;
import java.util.Set;
@Service
public class MenuServiceImpl implements MenuService {
    @Autowired
    private MenuDao menuDao;
    @Autowired
    private RoleDao roleDao;
    @Override
    public Set<Role> findAllRole() {
        return roleDao.findAllRole();
    }

    @Override
    public List<Menu> findAllmenu() {
        return menuDao.findAllmenu() ;
    }
//新增菜单方法
    @Override
    public void add(Menu menu, Integer[] checkitemIds, Integer[] checkitemIds1) {
        //添加菜单时 加上层级  先判断层级 第一层不可以有父类 然后查询层级为1的数量 +1 作为该层级的path
        //如果是第二层级  查询父id相同的数量   +1  作为优先级的级别 然后拼接 父path+优先级
        //添加菜单
        //查询层级
//        Integer level = menu.getLevel();
//        if (level==1){
//
//        }
//        menuDao.findMenuLevel()
        menuDao.addMenu(menu);
        //添加菜单与角色关系
        if (checkitemIds!=null){
        for (Integer checkitemId : checkitemIds) {
            menuDao.addMenuWithRole(menu.getId(),checkitemId);
            }
        }

        //添加菜单与子菜单的关系
        if (checkitemIds1!=null){
            for (Integer integer : checkitemIds1) {
                menuDao.addMenuWithMemu(menu.getId(),integer);
            }
        }

    }
//分页查询方法
    @Override
    public PageResult findPage(String queryString, Integer currentPage, Integer pageSize) {
        PageHelper.startPage(currentPage,pageSize);
       Page<Menu> page= menuDao.findPage(queryString);
        return new PageResult(page.getTotal(),page.getResult());
    }
    //   根据菜单id查询关联角色方法
    @Override
    public List<Integer> findRoleIdByMenuId(int id) {
        return menuDao.findRoleIdByMenuId(id);
    }
    //   根据菜单id查询子菜单方法
    @Override
    public List<Integer> findMenuIdByMenuId(int id) {
        return menuDao.findMenuIdByMenuId(id);
    }
    //菜单编辑方法
    @Override
    public void edit(Menu menu, Integer[] checkitemIds, Integer[] checkitemIds1) {
        //删除原有联系
        menuDao.deleteRoleWithMenu(menu.getId());
        menuDao.deleteMenuWithMenu(menu.getId());
        //添加菜单
        menuDao.updateMenu(menu);
        //添加联系
        //添加菜单与角色关系
        if (checkitemIds!=null){
            for (Integer checkitemId : checkitemIds) {
                menuDao.addMenuWithRole(menu.getId(),checkitemId);
            }
        }
        //添加菜单与子菜单的关系
        if (checkitemIds1!=null){
            for (Integer integer : checkitemIds1) {
                menuDao.addMenuWithMemu(menu.getId(),integer);
            }
        }
    }
//菜单删除方法
    @Override
    public void delete(int id) {
        //先删除关系
        menuDao.deleteRoleWithMenu(id);
        //删除父类
//        menuDao.deleteMenuPraent(id);
        //再删子类
        menuDao.deleteMenuWithMenu(id);
        //最后删自己
        menuDao.deleteMenu(id);
    }
}
